/**
 * 
 */
package com.mbengue.corp.apr.ra.beans;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import com.mbengue.corp.apr.ra.core.Adresse;
import com.mbengue.corp.apr.ra.core.Evenement;
import com.mbengue.corp.apr.ra.core.LieuEvenement;
import com.mbengue.corp.apr.ra.core.LieuEvenementId;
import com.mbengue.corp.apr.ra.dao.DAOFactory;

/**
 * @author MMB11447
 *
 */
@ManagedBean(name = "evenementBean")
@SessionScoped
public class EvenementBean implements Serializable {
  private static final long serialVersionUID = 1L;
  private Evenement evenement;
  private Adresse lieu;

  @PostConstruct
  public void init() {
    evenement = new Evenement();
    lieu = new Adresse();
  }

  /**
   * @return the evenement
   */
  public Evenement getEvenement() {
    return evenement;
  }

  /**
   * @param evenement the evenement to set
   */
  public void setEvenement(Evenement evenement) {
    this.evenement = evenement;
  }

  /**
   * @return the lieu
   */
  public Adresse getLieu() {
    return lieu;
  }

  /**
   * @param lieu the lieu to set
   */
  public void setLieu(Adresse lieu) {
    this.lieu = lieu;
  }

  public String enregistrer() {
    String redirect = "#";
    if (checkData()) {
      try {
        DAOFactory.getAdresseDao().ajouter(lieu);
        DAOFactory.getEvenementDao().ajouter(evenement);
        LieuEvenementId idLE = new LieuEvenementId(evenement.getId(), lieu.getId());
        LieuEvenement le = new LieuEvenement(idLE, lieu, evenement);
        DAOFactory.getLieuEvenementDao().ajouter(le);
        FacesContext.getCurrentInstance().addMessage(null,
            new FacesMessage(FacesMessage.SEVERITY_INFO, "Evénement enregistré ", "avec succés!"));
        redirect = "/pages/calendrier.xhtml?faces-redirect=true";
      } catch (Exception e) {
        FacesContext.getCurrentInstance().addMessage(null,
            new FacesMessage(FacesMessage.SEVERITY_ERROR, "Un erreur est survenu. Echec de l'opération!", ""));
      } finally {
        evenement = new Evenement();
        lieu = new Adresse();
      }
    }
    return redirect;
  }

  private boolean checkData() {
    if (checkMembreData()) {
      return checkAdresseData();
    }
    return false;
  }

  private boolean checkMembreData() {
    boolean isOK = true;
    if (evenement.getTitre().isEmpty() || evenement.getDebut() == null || evenement.getFin() == null) {
      FacesContext.getCurrentInstance().addMessage(null,
          new FacesMessage(FacesMessage.SEVERITY_ERROR, "Tous les champs sont obligatoires (excepté Descriptif).", ""));
      isOK = false;
    }
    return isOK;
  }

  private boolean checkAdresseData() {
    boolean isOK = true;
    if (lieu.getAdresse().isEmpty() || lieu.getCodePostal().isEmpty() || lieu.getPays().isEmpty()
        || lieu.getVille().isEmpty()) {
      FacesContext.getCurrentInstance().addMessage(null,
          new FacesMessage(FacesMessage.SEVERITY_ERROR, "Tous les champs pour le lieu sont obligatoires.", ""));
      isOK = false;
    }
    if (lieu.getCodePostal().length() != 5) {
      FacesContext.getCurrentInstance().addMessage(null,
          new FacesMessage(FacesMessage.SEVERITY_ERROR, "Le code postal doit contenir 5 chiffres !", ""));
      isOK = false;
    } else {
      try {
        Integer.parseInt(lieu.getCodePostal());
      } catch (NumberFormatException nfe) {
        FacesContext.getCurrentInstance().addMessage(null,
            new FacesMessage(FacesMessage.SEVERITY_ERROR, "Le code postal doit contenir que des chiffres (5).", ""));
        isOK = false;
      }
    }
    return isOK;
  }
}
